package demo1;

/**
 * @Author 12629
 * @Description: 实例内部类
 *
 */
class OuterClass {
    //
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;

    /**
     * 1. 如何获取 实例内部类对象？
     * 2. 在实例内部中，是否可以定义静态的成员变量？
     *        public static final int data6 = 6; 这样是可以的
     *        类加载的时候不会加载普通的成员变量 ,实例内部类中又存在static,而static是在类加载的时候创建的
     * 3.当外部类中数据成员 和 内部类中的数据成员 一样的时候  OuterClass.this.
     *    实例内部类当中 是包含 外部类的this的
     */

    class InnerClass {
        public int data1 = 1111;
        public int data4 = 4;
        private int data5 = 5;

        public static final int data6 = 6;

        public void test() {
            System.out.println(this.data1);//
            System.out.println(OuterClass.this.data1);//
            System.out.println(data4);
            System.out.println(data5);
            System.out.println("内部类的test方法");
        }
    }

    public void test() {
        System.out.println("外部类的test方法");
        InnerClass innerClass = new InnerClass();
        System.out.println(innerClass.data4);
    }
}



public class Test2 {
    public static void main(String[] args) {
        //InnerClass innerClass = new InnerClass();
        OuterClass outerClass = new OuterClass();
        //System.out.println(outerClass.data1);

        //获取实例内部类对象的时候 依赖于外部类对象
        OuterClass.InnerClass innerClass =  outerClass.new InnerClass();
        innerClass.test();

        OuterClass.InnerClass innerClass2 =  new OuterClass().new InnerClass();
        //innerClass2.test();

    }
}
